package com.sanploy.manage.mapper;

import com.sanploy.common.domain.dto.OrderSort;
import com.sanploy.common.domain.vo.OrderListVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * Created by zhu yingzhi on 2017/10/11.
 * @author yingzhi zhu
 * 订单数据库操作接口
 */
@Mapper
public interface OrderMapper {
    /**
     * 查找所有的订单
     * @param orderSort 订单的排序规则
     * @return 订单Vo实体集合
     */
    List<OrderListVo> findAllOrder(OrderSort orderSort);
    /**
     * 查找所有的订单数量
     * @param orderSort 订单排序规则
     * @return 订单数
     */
    int findAllOrderCount(OrderSort orderSort);
    /**
     * 通过OrderId 查找订单
     * @param orderId 订单id
     * @return 订单Vo实体
     */
    OrderListVo findByOrderId(@Param("order_id") String orderId);

    /**
     * 订单发货
     * @param orderId 订单号
     * @param orderStatus 订单状态
     * @param shippingTime 发货时间
     * @param beforeStatus 之前状态
     * @return 数据库影响行数
     */
    int deliverGoods(@Param("order_id") String orderId, @Param("order_status") String orderStatus, @Param("shipping_time") String shippingTime, @Param("before_status") String beforeStatus);

    /**
     * 订单里面的商品发货
     * @param orderId 订单号
     * @param orderStatus 订单状态
     * @param shippingTime 发货时间
     * @return
     */
    int deliverGoodsItem(@Param("order_id") String orderId, @Param("shipping_status") String orderStatus, @Param("shipping_time") String shippingTime);

    /**
     * 批量自动改变订单状态
     * @param list 订单号 list
     * @param orderStatus 订单状态
     * @param cancelTime 取消时间
     * @param beforeStatus 之前状态
     * @param endTime 在这个时间段之前改变订单
     * @return 数据库影响行数
     */
    int autoChangeOrdersStatusBat(@Param("list") List<String> list, @Param("order_status") String orderStatus,
                                  @Param("cancel_time") String cancelTime, @Param("before_status") String beforeStatus, @Param("end_time") String endTime);

    /**
     * 自动改变订单状态
     * @param orderId 订单号
     * @param orderStatus 订单状态
     * @param cancelTime 取消时间
     * @param beforeStatus 之前状态
     * @param endTime 在这个时间段之前改变订单
     * @return 数据库影响行数
     */
    int autoChangeOrdersStatus(@Param("order_id") String orderId, @Param("order_status") String orderStatus,
                               @Param("cancel_time") String cancelTime, @Param("before_status") String beforeStatus, @Param("end_time") String endTime);

    /**
     * 自动改变某用户的订单状态
     * @param userId 用户id
     * @param orderStatus 订单状态
     * @param cancelTime 取消时间
     * @param beforeStatus 之前状态
     * @param endTime 在这个时间段之前改变订单
     * @return 数据库影响行数
     */
    int changeUserOrdersStatus(@Param("user_id") Long userId, @Param("order_status") String orderStatus,
                               @Param("cancel_time") String cancelTime, @Param("before_status") String beforeStatus, @Param("end_time") String endTime);

    /**
     * 查找某用户的指定状态下的订单
     * @param userId 用户id
     * @param orderStatus 订单状态
     * @return 订单号集合
     */
    List<String> findCancerUserOrders(@Param("user_id") Long userId, @Param("order_status") String orderStatus);

    /**
     * 查找某状态下的订单
     * @param orderStatus 订单状态
     * @return 订单号集合
     */
    @Select("SELECT order_id from  orders WHERE order_status=#{order_status}")
    List<String> findOrdersByStatus(@Param("order_status") String orderStatus);



}
